﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using BussinessLogicTecnoPez.Produccion.Compras;
using Tecnopez.Globals;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Tipos_Comunes;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;

namespace TecnoPezWeb.Modules.Compras
{
    public partial class ABMInsumos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.Page.IsPostBack)
            {
                SetMode(PageMode.ListMode);
            }

            TPPTipoInsumo.ObjType = typeof(TipoInsumo);
            popUnidadDeMedida.ObjType = typeof(UnidadMedida);

            InicializarValidadores();
            InicializarGrilla();

            cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/configurar.gif";
            master.Titulo = "Gestión de Insumos";
            cargarGrilla();
            _lblError.Text = "";
        }

        private void InicializarValidadores()
        {
            PPVDescripcion.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Insumo";
            PPVDescripcion.ControlToValidate = "txtDescripcion";
            PPVDescripcion.PropertyName = "Descripcion";
            PPVDescripcion.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVTipoInsumo.SourceTypeName = "BussinessLogicTecnoPez.Produccion.Compras.Insumo";
            PPVTipoInsumo.ControlToValidate = "txtDescripcion";
            PPVTipoInsumo.PropertyName = "TipoInsumo";
            PPVTipoInsumo.DisplayMode = ValidationSummaryDisplayMode.List;
        }

        private void InicializarGrilla()
        {
            grdInsumos.setupGrid<Insumo>(cargarGrilla, seleccionarInsumo, null, true, this.ViewState);
        }

        private void seleccionarInsumo(int o)
        {
            int IdInsumo = int.Parse(grdInsumos.grdDatosAbmView.DataKeys[o].Value.ToString());
            Insumo.getManager.ClearFilters();
            Insumo.getManager.AddFilter("IDINSUMO", GenericManager<Insumo>.filterOperator.Equals, IdInsumo);
            Insumo objInsumo = Insumo.getManager.GetOne();
            txtID.Text = objInsumo.IdInsumo.ToString();
            txtDescripcion.Text = objInsumo.Descripcion.Trim();

            if (objInsumo.TipoInsumo != null)
                TPPTipoInsumo.ItemSelected = objInsumo.TipoInsumo;
            else
                TPPTipoInsumo.ItemSelected = null;

            popUnidadDeMedida.ItemSelected = objInsumo.UnidadDeMedida;

            SetMode(PageMode.ViewMode);
        }

        private void cargarGrilla()
        {
            Insumo.getManager.ClearFilters();
            Insumo.getManager.ClearOrders();
            Insumo.getManager.AddFilter("Descripcion", GenericManager<Insumo>.filterOperator.Like, "%" + txtBuscarDescripcion.Text.Trim() + "%");

            List<Insumo> lista = new List<Insumo>();
            lista = Insumo.getManager.GetFilter();
            grdInsumos.grdDatosAbmView.DataSource = lista;
            grdInsumos.grdDatosAbmView.DataBind();
        }

        private void SetMode(PageMode mode)
        {
            ViewState["PageMode"] = mode;
            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtDescripcion.Enabled = true;
                    TPPTipoInsumo.Enable = true;
                    popUnidadDeMedida.Enable = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtDescripcion.Enabled = true;
                    TPPTipoInsumo.Enable = true;
                    popUnidadDeMedida.Enable = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtDescripcion.Enabled = false;
                    TPPTipoInsumo.Enable = false;
                    popUnidadDeMedida.Enable = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    cmdEliminar.Enabled = true;
                    break;
            }
        }
        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            this.txtDescripcion.Text = "";
            this.txtID.Text = "";
            this.TPPTipoInsumo.ItemSelected = null;
            this.popUnidadDeMedida.ItemSelected = null;
            SetMode(PageMode.NewMode);
        }
        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.EditMode);
        }
        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                Insumo objInsumo = new Insumo();

                objInsumo.IdInsumo = int.Parse(txtID.Text.ToUpper().Trim());
                if (Insumo.getManager.Delete(objInsumo) < 1)
                {
                    throw Insumo.getManager.GeneratedException;
                }
                SetMode(PageMode.ListMode);
                cargarGrilla();
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.ListMode);
            }
        }
        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                Insumo objInsumo = new Insumo();
                objInsumo.Descripcion = txtDescripcion.Text.Trim();

                if (TPPTipoInsumo.ItemSelected != null)
                {
                    TipoInsumo objTipo = new TipoInsumo();
                    objTipo = (TipoInsumo)TPPTipoInsumo.ItemSelected;
                    objInsumo.TipoInsumo = objTipo;
                    objTipo = null;
                }

                objInsumo.UnidadDeMedida = popUnidadDeMedida.ItemSelected as UnidadMedida;

                if (validar(objInsumo))
                {
                    if (getMode() == PageMode.NewMode)
                    {
                        if (Insumo.getManager.Insert(objInsumo) != true)
                        {
                            throw Insumo.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }
                    else
                    {
                        objInsumo.IdInsumo = int.Parse(txtID.Text.ToUpper().Trim());
                        if (Insumo.getManager.Update(objInsumo) != true)
                        {
                            throw Insumo.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ViewMode);
                    }
                }
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }

        private PageMode getMode()
        {
            if (ViewState["PageMode"] == null)
                return PageMode.ModeNotFound;
            return (PageMode)ViewState["PageMode"];
        }

        private bool validar(Insumo objeto)
        {
            ValidationResults v = Validation.Validate<Insumo>(objeto);
            if (!v.IsValid)
            {
                _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
            }
            return v.IsValid;
        }
        protected void PPVTipoInsumo_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
        {
            if (TPPTipoInsumo.ItemSelected == null)
            {
                e.ConvertedValue = null;
            }
            else
            {
                e.ConvertedValue = TPPTipoInsumo.ItemSelected.ToString();
            }
        }
    }
}